home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / g / gnu_c / gempp19.zoo / gem++19 / include / vdi.h < prev   
Encoding:
C/C++ Source or Header  |  1993-11-10  |  12.0 KB  |  319 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  VDI
  4. //
  5. //  A VDI is an encapsulation of a VDI [Virtual] Workstation.
  6. //
  7. //  This file is Copyright 1992,1993 by Warwick W. Allison.
  8. //  This file is part of the gem++ library.
  9. //  You are free to copy and modify these sources, provided you acknowledge
  10. //  the origin by retaining this notice, and adhere to the conditions
  11. //  described in the file COPYING.LIB.
  12. //
  13. /////////////////////////////////////////////////////////////////////////////
  14.  
  15. #ifndef VDI_h
  16.  
  17. #define VDI_h
  18.  
  19. #include <bool.h>
  20. #include <stddef.h>
  21. #include <gemfast.h>
  22.  
  23.  
  24. class VDI
  25. {
  26. public:
  27.     // AES physical screen driver
  28.     VDI();                        // Standard screen VDI.
  29.  
  30.     // META.SYS driver
  31.     VDI(const char* metafile);    // Standard metafile (only if GDOS present).
  32.  
  33.     // Other devices (printers, etc).  Not supported yet.
  34.     //VDI(int device, int w, int h);
  35.  
  36.  
  37.     ~VDI();
  38.  
  39.     int  operator!() { return handle<0; }    // !v == creation failed
  40.  
  41.     // Global
  42.     void clrwk();
  43.     void updwk();
  44.  
  45.     // Constants
  46.     int MaxX() const                                { return WorkOut(0); }
  47.     int MaxY() const                                { return WorkOut(1); }
  48.     int Width() const                                { return WorkOut(0)+1; }
  49.     int Height() const                                { return WorkOut(1)+1; }
  50.     bool PreciseScaling() const                        { return WorkOut(2); }
  51.     int PixelWidth() /* microns */ const            { return WorkOut(3); }
  52.     int PixelHeight() /* microns */ const            { return WorkOut(4); }
  53.     int NumberOfCharacterHeights() const            { return WorkOut(5); }
  54.     int NumberOfLineTypes() const                    { return WorkOut(6); }
  55.     /* don't believe */ int NumberOfLineWidths() const    { return WorkOut(7); }
  56.     int NumberOfMarkerTypes() const                    { return WorkOut(8); }
  57.     int NumberOfMarkerSizes() const                    { return WorkOut(9); }
  58.     int NumberOfTextFaces() const;
  59.     int NumberOfPatterns() const                    { return WorkOut(11); }
  60.     int NumberOfHatchStyles() const                    { return WorkOut(12); }
  61.     int NumberOfPredefinedColours() const            { return WorkOut(13); }
  62.     int NumberOfAvailableColours() const            { return WorkOut(39); }
  63.     int NumberOfGDPs() const                        { return WorkOut(14); }
  64.     int GDP(int i /* 0..9 */) const                    { return WorkOut(15+i); }
  65.     int GDPAttribute(int i /* 0..9 */) const        { return WorkOut(25+i); }
  66.     bool Colour() const                                { return WorkOut(35); }
  67.     bool RotateTExtWorks() const                    { return WorkOut(36); }
  68.     bool FillAreaWorks() const                        { return WorkOut(37); }
  69.     bool CellArrayWorks() const                        { return WorkOut(38); }
  70.     int NumberOfLocators() const                    { return WorkOut(40); }
  71.     int NumberOfValidators() const                    { return WorkOut(41); }
  72.     int NumberOfChoosers() const                    { return WorkOut(42); }
  73.     int NumberOfStringDevices() const                { return WorkOut(43); }
  74.     int WorkstationType() const                        { return WorkOut(44); }
  75.     bool CanOutput() const                            { return (WorkOut(44)&1)==0; }
  76.     bool CanInput() const                            { return (WorkOut(44)&3)>0; }
  77.     bool IsMetafile() const                            { return WorkOut(44)==4; }
  78.  
  79.     int ScreenType() const                            { return ExtWorkOut(0); }
  80.     int NumberOfBackgroundColours() const            { return ExtWorkOut(1); }
  81.     bool TextEffectsSupported() const                { return ExtWorkOut(2); }
  82.     bool ScalableRasters() const                    { return ExtWorkOut(3); }
  83.     int NumberOfPlanes() const                        { return ExtWorkOut(4); }
  84.     bool PaletteBased() const                        { return ExtWorkOut(5); }
  85.     int Speed() const                                { return ExtWorkOut(6); }
  86.     bool ContourFillSupported() const                { return ExtWorkOut(7); }
  87.     int CharacterRotationType() const                { return ExtWorkOut(8); }
  88.     int NumberOfWritingModes() const                { return ExtWorkOut(9); }
  89.     int InputModesAvailable() const                    { return ExtWorkOut(10); }
  90.     bool TextAlignmentSupported() const                { return ExtWorkOut(11); }
  91.     bool InkingSupported() const                    { return ExtWorkOut(12); }
  92.     int RubberbandingSupported() const                { return ExtWorkOut(13); }
  93.     int MaximumVertices() const                        { return ExtWorkOut(14); }
  94.     int MaximumIntin() const                        { return ExtWorkOut(15); }
  95.     int NumberOfMouseButtons() const                { return ExtWorkOut(16); }
  96.     bool StyledWideLinesSupported() const            { return ExtWorkOut(17); }
  97.     bool WideLinesWriteModesSupported() const        { return ExtWorkOut(18); }
  98.  
  99.     int WorkOut(int index) const;
  100.     int ExtWorkOut(int index) const;
  101.  
  102.     int CharWidth() const;
  103.     int CharHeight() const;
  104.     int CharCellWidth() const;
  105.     int CharCellHeight() const;
  106.  
  107.     // Attributes
  108.     int  swr_mode (int mode);
  109.     void s_color (int index, int rgb[]);
  110.     int     sl_type (int style);
  111.     void sl_udsty (int pat);
  112.     int     sl_width (int width);
  113.     int     sl_color (int index);
  114.     void sl_ends (int begstyle, int endstyle);
  115.     int     sm_type (int symbol);
  116.     void sm_height (int height);
  117.     int     sm_color (int index);
  118.     int  st_height (int height, int *charw, int *charh, int *cellw, int *cellh);
  119.     int     st_point (int point, int *charw, int *charh, int *cellw, int *cellh);
  120.     int     st_rotation (int ang);
  121.     int     st_font (int font);
  122.     int     st_color (int index);
  123.     int     st_effects (int effects);
  124.     void st_alignment (int hin, int vin, int *hout, int *vout); 
  125.     int     sf_interior (int style);
  126.     int     sf_fill (int style);
  127.     int     sf_style (int style);
  128.     int     sf_color (int index);
  129.     int     sf_perimeter (int vis);
  130.     void sf_udpat (int pat[], int planes);
  131.  
  132.     // NOTE: In GEM++, fonts are unloaded automatically.
  133.     //       Also, st_load_fonts MAY be called without GDOS (int returns 0).
  134.     //
  135.     int     st_load_fonts (int select=0);
  136.     void st_unload_fonts (int select=0);
  137.  
  138.     void s_clip (int clip_flag, int pxyarray[]);
  139.  
  140.     // Outputs
  141.     void bar (int pxyarray[]);
  142.     void arc (int x, int y, int radius, int begang, int endang); 
  143.     void pieslice (int x, int y, int radius, int begang, int endang);
  144.     void circle (int x, int y, int radius);
  145.     void ellarc (int x, int y, int xrad, int yrad, int begang, int endang);
  146.     void ellpie (int x, int y, int xrad, int yrad, int begang, int endang);
  147.     void ellipse (int x, int y, int xrad, int yrad);
  148.     void rbox (int pxyarray[]);
  149.     void rfbox (int pxyarray[]);
  150.     void justified (int x, int y, char *str, int len, int word_space, int char_space);
  151.     void pline (int count, int pxyarray[]);
  152.     void pmarker (int count, int pxyarray[]);
  153.     int     gtext (int x, int y, char *str);
  154.     void fillarea (int count, int pxyarray[]);
  155.     void cellarray (int pxyarray[], int row_length, int elements, int nrows, int write_mode, int colarray[]);
  156.     void contourfill (int x, int y, int index);
  157.     void r_recfl (int pxyarray[]);
  158.  
  159.     void ro_cpyfm (int mode, int pxyarray[], const MFDB& src, const MFDB& dst);
  160.     void rt_cpyfm (int mode, int pxyarray[], const MFDB& src, const MFDB& dst, int color[]);  
  161.     void r_trnfm (const MFDB& src, const MFDB& dst);
  162.     void get_pixel (int x, int y, int *pel, int *indx); 
  163.  
  164.  
  165.     // Inputs
  166.     int     sin_mode  (int dev, int mode);
  167.     void rq_locator (int x, int y, int *xout, int *yout, int *term);  
  168.     int     sm_locator (int x, int y, int *xout, int *yout, int *term);
  169.  
  170.     void rq_valuator (int in, int *out, int *term);
  171.     void sm_valuator (int in, int *out, int *term, int *status);
  172.     void rq_choice (int cin, int *cout);
  173.     int     sm_choice (int *choice);
  174.     void rq_string (int len, int echo, int echoxy[], char *str);
  175.     int     sm_string (int len, int echo, int echoxy[], char *str);
  176.     void sc_form (int form[]);
  177.     void ex_timv (void *time_addr, void **otime_addr, int *time_conv); 
  178.     void show_c (int reset);
  179.     void hide_c ();
  180.     void q_mouse (int *pstatus, int *x, int *y);
  181.     void ex_butv (void *new_p, void **old);
  182.     void ex_motv (void *new_p, void **old);
  183.     void ex_curv (void *new_p, void **old);
  184.     void q_key_s (int *state);
  185.  
  186.     // Inquiries
  187.     void q_extnd (int flag, int work_out[]) const;
  188.     int     q_color (int index, int flag, int rgb[]) const;
  189.     void ql_attribute (int atrib[]) const;
  190.     void qm_attributes (int atrib[]) const;
  191.     void qf_attributes (int atrib[]) const;
  192.     void qt_attributes (int atrib[]) const;
  193.     void qt_extent (char *str, int extent[]) const;
  194.     int     qt_width (int chr, int *cw, int *ldelta, int *rdelta) const;
  195.     int     qt_name (int element, char *name) const;
  196.     void qt_fontinfo (int *minade, int *maxade, int distances[], int *maxwidth, int effects[]);  
  197.     void qt_font_info (int *minade, int *maxade, int distances[], int *maxwidth, int effects[]);  
  198.  
  199.  
  200.     void q_cellarray (int pxyarray[], int row_len, int nrows, int *el_used, int *rows_used, int *status, int color[]);  
  201.     void qin_mode (int dev, int *mode);
  202.  
  203.     // ASCII terminal
  204.     void q_chcells (int *n_rows, int *n_cols);
  205.     void exit_cur ();
  206.     void enter_cur ();
  207.     void curup ();
  208.     void curdown ();
  209.     void curright ();
  210.     void curleft ();
  211.     void curhome ();
  212.     void eeos ();
  213.     void eeol ();
  214.     void s_curaddress (int row, int col);
  215.     void curtext (char *s);
  216.     void rvon ();
  217.     void rvoff ();
  218.     void q_curaddress (int *cur_row, int *cur_col);
  219.     int  q_tabstatus ();
  220.     void hardcopy ();
  221.     void dspcur  (int x, int y);
  222.     void rmcur ();
  223.     void form_adv ();
  224.     void output_window (int *pxyarray);
  225.     void clear_disp_list ();
  226.     void bit_image (const char *filename, int aspect, int x_scale, int y_scale, int h_align, int v_align, int *pxyarray);
  227.     void q_scan (int *g_slice, int *g_page, int *a_slice, int *a_page, int *div_fac);
  228.     void alpha_text (const char *string);
  229.     int  s_palette (int palette);
  230.     void sound (int frequency, int duration);
  231.     int  s_mute (int action);
  232.     void t_resolution (int xres, int yres, int *xset, int *yset);
  233.     void t_axis (int xres, int yres, int *xset, int *yset);
  234.     void t_origin (int xorigin, int yorigin);
  235.     void q_dimensions (int *xdimension, int *ydimension);
  236.     void t_alignment (int dx, int dy);
  237.     void sp_film (int index, int lightness);
  238.     int  qp_filmname (int index, char *name);
  239.     void sc_expose (int state);
  240.     void meta_extents (int min_x, int min_y, int max_x, int max_y);
  241.     void write_meta (int num_intin, int *a_intin, int num_ptsin, int *a_ptsin);
  242.     void m_pagesize (int pgwidth, int pgheight);
  243.     void m_coords (int llx, int lly, int urx, int ury);
  244.     void m_filename (const char *filename);
  245.     void escape2000 (int times);
  246.     unsigned long q_vgdos ();
  247.     void getbitmap_info (int ch, long *advancex, long *advancey, long *xoffset, long *yoffset, int *width, int *height, short **bitmap);
  248.     void qt_f_extent (const char *str, int extent[]);
  249.     void ftext (int x, int y, const char *str);
  250.     //void killoutline (void *component); OBSOLETE
  251.     void getoutline (int ch, int *xyarray, char *bezarray, int maxverts, int *numverts);
  252.     void st_scratch (int mode);
  253.     void st_error (int mode, short *errorvar);
  254.     int  st_arbpt (int point, int *wchar, int *hchar, int *wcell, int *hcell);
  255.     void qt_advance (int ch, int *xadv, int *yadv, int *xrem, int *yrem); 
  256.     void qt_devinfo (int device, int *isdev, char *drivername);
  257.     int  savecache (char *filename);
  258.     int  loadcache (char *filename, int mode);
  259.     int  flushcache ();
  260.     int  st_setsize (int point, int *wchar, int *hchar, int *wcell, int *hcell);
  261.     int  st_skew (int skew);
  262. //    void qt_get_tables (void **gascii, void **style); OBSOLETE
  263.     void qt_get_table (short **map);
  264.     void qt_cachesize (int which_cache, size_t *size);
  265.     int  bez (int count, int *xyarr, char *bezarr, int extent[4], int *npts, int *nmvs);
  266.     int  bez_fill (int count, int *xyarr, char *bezarr, int extent[4], int *npts, int *nmvs);
  267.     int  bez_qual (int percent, int *actual);
  268.     int  bez_on ();
  269.     void bez_off ();
  270.  
  271.     void shtext (int wsid, int x, int y, const char *text, int color, int xshadow, int yshadow);
  272.     void set_app_buff (void **buf_p, int size);
  273.  
  274. // Shorthands...
  275.     // As standard calls, but do not return cell dimensions / other values
  276.     int  st_height(int height);
  277.     int     st_point(int point);
  278.     void st_alignment(int hin, int vin);
  279.  
  280.     // Clip to full area of device
  281.     void clip();
  282.     // Clip to area
  283.     void clip(int x1, int y1, int x2, int y2);
  284.     // No clipping
  285.     void clip_off();
  286.  
  287.  
  288.     // Non Pxyarray versions...
  289.     void bar(int x1, int y1, int x2, int y2);
  290.     void rbox(int x1, int y1, int x2, int y2);
  291.     void rfbox(int x1, int y1, int x2, int y2);
  292.     void line(int x1, int y1, int x2, int y2);
  293.     void marker(int x, int y);
  294.     void r_recfl(int x1, int y1, int x2, int y2);
  295.  
  296.     // Combine SRC and DST using any logical operators.
  297.     // eg. SRC|DST gives "or" mode.
  298.     const int SRC=3;
  299.     const int DST=5;
  300.  
  301.     // Unary version - destination is this VDI
  302.     void ro_cpyfm(int mode, int pxyarray[], VDI& from);
  303.     void rt_cpyfm(int mode, int pxyarray[], VDI& from, int color[]);  
  304.     void r_trnfm(VDI& from);
  305.  
  306.     // Nullary version - source and destination is this VDI
  307.     void ro_cpyfm(int mode, int pxyarray[]);
  308.     void rt_cpyfm(int mode, int pxyarray[], int color[]);  
  309.     void r_trnfm();
  310.  
  311.     const MFDB& MF();
  312.  
  313. private:
  314.     short handle;
  315.     short flags;
  316. };
  317.  
  318. #endif
  319.